Micron Document
🎖️GitЯра🎖️

Node / meshtastic / Meshtastic-Android / files / app / src / main / java / com / geeksville / mesh / ui / intro / AppIntroductionScreen.kt

Displaying Raw • Download

app/src/main/java/com/geeksville/mesh/ui/intro/AppIntroductionScreen.kt ui_message_list (be3f882f) Text, 5.65 KB

T8b949e/*
* Copyright (c) 2025 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/

Tff7b72package T7ee787com.geeksville.mesh.ui.intro

Tff7b72import T7ee787android.Manifest
Tff7b72import T7ee787android.content.Intent
Tff7b72import T7ee787android.os.Build
Tff7b72import T7ee787android.provider.Settings
Tff7b72import T7ee787androidx.compose.runtime.Composable
Tff7b72import T7ee787androidx.compose.ui.platform.LocalContext
Tff7b72import T7ee787androidx.navigation3.runtime.NavKey
Tff7b72import T7ee787androidx.navigation3.runtime.entry
Tff7b72import T7ee787androidx.navigation3.runtime.entryProvider
Tff7b72import T7ee787androidx.navigation3.runtime.rememberNavBackStack
Tff7b72import T7ee787androidx.navigation3.ui.NavDisplay
Tff7b72import T7ee787com.google.accompanist.permissions.ExperimentalPermissionsApi
Tff7b72import T7ee787com.google.accompanist.permissions.PermissionState
Tff7b72import T7ee787com.google.accompanist.permissions.isGranted
Tff7b72import T7ee787com.google.accompanist.permissions.rememberMultiplePermissionsState
Tff7b72import T7ee787com.google.accompanist.permissions.rememberPermissionState
Tff7b72import T7ee787kotlinx.serialization.Serializable

T8b949e/**
* Composable function for the main application introduction screen. This screen guides the user through initial setup
* steps like granting permissions.
*
* @param onDone Callback invoked when the introduction flow is completed.
*/
Tf0883e@OptInTb4b4b4(Te6edf3ExperimentalPermissionsApiTff7b72::Te6edf3classTb4b4b4)
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffLongMethodTa5d6ff"Tb4b4b4)
Tf0883e@Composable
Tff7b72fun Td2a8ffAppIntroductionScreenTb4b4b4(Te6edf3onDoneTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3context Tff7b72= Te6edf3LocalContextTb4b4b4.Te6edf3current

Tff7b72val Te6edf3notificationPermissionStateTb4b4b4: Te6edf3PermissionState? Tff7b72=
Tff7b72if Tb4b4b4(Te6edf3BuildTb4b4b4.Te6edf3VERSIONTb4b4b4.Te6edf3SDK_INT Tff7b72>Tff7b72= Te6edf3BuildTb4b4b4.Te6edf3VERSION_CODESTb4b4b4.Te6edf3TIRAMISUTb4b4b4) Tb4b4b4{
Te6edf3rememberPermissionStateTb4b4b4(Te6edf3ManifestTb4b4b4.Te6edf3permissionTb4b4b4.Te6edf3POST_NOTIFICATIONSTb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72null
Tb4b4b4}

Tff7b72val Te6edf3locationPermissions Tff7b72=
Te6edf3listOfTb4b4b4(Te6edf3ManifestTb4b4b4.Te6edf3permissionTb4b4b4.Te6edf3ACCESS_FINE_LOCATIONTb4b4b4, Te6edf3ManifestTb4b4b4.Te6edf3permissionTb4b4b4.Te6edf3ACCESS_COARSE_LOCATIONTb4b4b4)
Tff7b72val Te6edf3locationPermissionState Tff7b72= Te6edf3rememberMultiplePermissionsStateTb4b4b4(Te6edf3permissions Tff7b72= Te6edf3locationPermissionsTb4b4b4)

Tff7b72val Te6edf3backStack Tff7b72= Te6edf3rememberNavBackStackTb4b4b4(Te6edf3WelcomeTb4b4b4)

Te6edf3NavDisplayTb4b4b4(
Te6edf3backStack Tff7b72= Te6edf3backStackTb4b4b4,
Te6edf3onBack Tff7b72= Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3entryProvider Tff7b72=
Te6edf3entryProvider Tb4b4b4{
Te6edf3entryTff7b72<Te6edf3WelcomeTff7b72> Tb4b4b4{ Te6edf3WelcomeScreenTb4b4b4(Te6edf3onGetStarted Tff7b72= Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3addTb4b4b4(Te6edf3NotificationsTb4b4b4) Tb4b4b4}Tb4b4b4) Tb4b4b4}

Te6edf3entryTff7b72<Te6edf3NotificationsTff7b72> Tb4b4b4{
Tff7b72val Te6edf3notificationsAlreadyGranted Tff7b72= Te6edf3notificationPermissionStateTff7b72?.Te6edf3statusTff7b72?.Te6edf3isGranted Tff7b72?: Tff7b72true
Te6edf3NotificationsScreenTb4b4b4(
Te6edf3showNextButton Tff7b72= Te6edf3notificationsAlreadyGrantedTb4b4b4,
Te6edf3onSkip Tff7b72= Tb4b4b4{
T8b949e// Skip this screen and the Critical Alerts screen. Proceed to Location screen.
Te6edf3backStackTb4b4b4.Te6edf3addTb4b4b4(Te6edf3LocationTb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3onConfigure Tff7b72= Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3notificationsAlreadyGrantedTb4b4b4) Tb4b4b4{
Te6edf3backStackTb4b4b4.Te6edf3addTb4b4b4(Te6edf3CriticalAlertsTb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
T8b949e// For Android Tiramisu (API 33) and above, this requests POST_NOTIFICATIONS
T8b949e// For lower versions, notificationPermissionState will be null, and this branch isn't
T8b949e// taken.
Te6edf3notificationPermissionStateTff7b72?.Te6edf3launchPermissionRequestTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

Te6edf3entryTff7b72<Te6edf3CriticalAlertsTff7b72> Tb4b4b4{
Te6edf3CriticalAlertsScreenTb4b4b4(
Te6edf3onSkip Tff7b72= Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3addTb4b4b4(Te6edf3LocationTb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3onConfigure Tff7b72= Tb4b4b4{
T8b949e// Intent to open the specific notification channel settings for "my_alerts"
T8b949e// This allows the user to enable critical alerts if they were initially denied
T8b949e// or to adjust settings for notifications that can bypass Do Not Disturb.
Tff7b72val Te6edf3intent Tff7b72=
Te6edf3IntentTb4b4b4(Te6edf3SettingsTb4b4b4.Te6edf3ACTION_CHANNEL_NOTIFICATION_SETTINGSTb4b4b4)Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3putExtraTb4b4b4(Te6edf3SettingsTb4b4b4.Te6edf3EXTRA_APP_PACKAGETb4b4b4, Te6edf3contextTb4b4b4.Te6edf3packageNameTb4b4b4)
Te6edf3putExtraTb4b4b4(Te6edf3SettingsTb4b4b4.Te6edf3EXTRA_CHANNEL_IDTb4b4b4, Ta5d6ff"Ta5d6ffmy_alertsTa5d6ff"Tb4b4b4)
Tb4b4b4}
Te6edf3contextTb4b4b4.Te6edf3startActivityTb4b4b4(Te6edf3intentTb4b4b4)
Te6edf3backStackTb4b4b4.Te6edf3addTb4b4b4(Te6edf3LocationTb4b4b4)
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

Te6edf3entryTff7b72<Te6edf3LocationTff7b72> Tb4b4b4{
Tff7b72val Te6edf3locationAlreadyGranted Tff7b72= Te6edf3locationPermissionStateTb4b4b4.Te6edf3allPermissionsGranted
Te6edf3LocationScreenTb4b4b4(
Te6edf3showNextButton Tff7b72= Te6edf3locationAlreadyGrantedTb4b4b4,
Te6edf3onSkip Tff7b72= Te6edf3onDoneTb4b4b4, T8b949e// Callback to signify completion of the intro flow
Te6edf3onConfigure Tff7b72= Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3locationAlreadyGrantedTb4b4b4) Tb4b4b4{
Te6edf3onDoneTb4b4b4(Tb4b4b4) T8b949e// Permissions already granted, proceed to finish
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3locationPermissionStateTb4b4b4.Te6edf3launchMultiplePermissionRequestTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

Tf0883e@Serializable Tff7b72private Tff7b72data Tff7b72object T56d364Welcome Tb4b4b4: Te6edf3NavKey

Tf0883e@Serializable Tff7b72private Tff7b72data Tff7b72object T56d364Notifications Tb4b4b4: Te6edf3NavKey

Tf0883e@Serializable Tff7b72private Tff7b72data Tff7b72object T56d364CriticalAlerts Tb4b4b4: Te6edf3NavKey

Tf0883e@Serializable Tff7b72private Tff7b72data Tff7b72object T56d364Location Tb4b4b4: Te6edf3NavKey

Served by rngit 1.5.0 - Generated in 0.06s